#pragma once
#include "Common.hpp"

// 单例模式 饿汉模式 直接创建一个对象
class CentralCache
{
public:
    static CentralCache *GetInstance()
    {
        return &_sInst;
        // 返回静态变量的地址
    }
    //获取一个非空Span
    Span* GetOneSpan(SpanList& list, size_t byte_size);
    //从中心缓存分配一定数量的对象给thread cache
    size_t FetchRangeObj(void*& start, void*& end,size_t batchNum,size_t size);

    // 将一定数量的对象释放到span跨度
    void ReleaseListToSpans(void* start, size_t bytes);
    
private:
    SpanList _spanLists[NFREELIST];

private:
    CentralCache() {}                            // 构造函数私有
    CentralCache(const CentralCache &) = delete; // 禁止拷贝构造
    static CentralCache _sInst;                  // 声明静态变量
};